<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: yangweijie <yangweijiester@gmail.com> <code-tech.diandian.com>
// +----------------------------------------------------------------------

namespace Admin\Model;
use Common\Model\Base;

/**
 * 插件模型
 * @author yangweijie <yangweijiester@gmail.com>
 */

class AddonsModel extends Base {

	/**
	 * 查找后置操作
	 */
	protected function _after_find(&$result, $options) {

	}

	protected function _after_select(&$result, $options) {

		foreach ($result as &$record) {
			$this->_after_find($record, $options);
		}
	}
	/**
	 * 文件模型自动完成
	 * @var array
	 */
	protected $_auto = array(
		array('create_time', NOW_TIME, self::MODEL_INSERT),
	);

	/**
	 * 获取插件列表
	 * @param string $addon_dir
	 */
	public function getList($addon_dir = '') {
		if (!$addon_dir) {
			$addon_dir = ONETHINK_ADDON_PATH;
		}

		$dirs = array_map('basename', glob($addon_dir . '*', GLOB_ONLYDIR));
		//TODO 新增模块插件的支持
		/* $modules=D('Module')->getAll();
	        foreach($modules as $m){
	            if($m['is_setup']){
	                $module_dir=APP_PATH.$m['name'].'/Addons/';
	                if(!file_exists($module_dir)){
	                    continue;
	                }
	                $tmp_dirs = array_map('basename',glob($module_dir.'*', GLOB_ONLYDIR));
	                $dirs=array_merge($dirs,$tmp_dirs);
	            }
        */

		if ($dirs === FALSE || !file_exists($addon_dir)) {
			$this->error = '插件目录不可读或者不存在';
			return FALSE;
		}
		$addons = array();
		$where['name'] = array('in', $dirs);
		$list = $this->where($where)->field(true)->select();
		foreach ($list as $addon) {
			$addon['uninstall'] = 0;
			$addons[$addon['name']] = $addon;
		}
		foreach ($dirs as $value) {

			if (!isset($addons[$value])) {
				$class = get_addon_class($value);
				if (!class_exists($class)) {
					// 实例化插件失败忽略执行
					\Think\Log::record('插件' . $value . '的入口文件不存在！');
					continue;
				}
				$obj = new $class;
				$addons[$value] = $obj->info;
				if ($addons[$value]) {
					$addons[$value]['uninstall'] = 1;
					unset($addons[$value]['status']);
				}
			}
		}
		//dump($list);exit;
		int_to_string($addons, array('status' => array(-1 => '损坏', 0 => '禁用', 1 => '启用', null => '未安装')));
		$addons = list_sort_by($addons, 'uninstall', 'desc');
		return $addons;
	}

	/**
	 * 获取插件的后台列表
	 */
	public function getAdminList() {
		$admin = array();
		$db_addons = $this->where('status=1 AND has_adminlist=1')->field('title,name')->select();
		if ($db_addons) {
			foreach ($db_addons as $value) {
				$admin[] = array('title' => $value['title'], 'url' => "Addons/adminList?name={$value['name']}");
			}
		}
		return $admin;
	}
}
